Vous pouvez retrouver cette fiche rcapitulative dans la fiche glossaire des dictionnaires sur Docstring, avec la possibilit de modifier et tester le code de cette fiche :
https://www.docstring.fr/glossaire/dictionnaire/
Les dictionnaires sont des collections d'objets non-ordonnes.
Un dictionnaire est compos d'lments et chaque lment se compose d'une paire cl: valeur.
Dans d'autres langages de programmation, on parle de tableaux associatifs ou de hashs.
Comme les listes, les dictionnaires sont des objets muables et dynamiques. Ils peuvent tre modifis et s'tendre selon vos besoins.
Un dictionnaire peut contenir des objets de n'importe quel type et mme inclure d'autres dictionnaires.
C'est grce ces caractristiques que les dictionnaires sont souvent utiliss pour crer des structures de donnes complexes o plusieurs lments sont imbriqus les uns dans les autres !
La faon la plus simple de crer un dictionnaire est d'ouvrir des accolades {} et d'y insrer des paires de cls et de valeurs.
Pour crire une paire, il faut respecter la syntaxe suivante : cl: valeur.
Chaque paire doit tre spare de l'autre par une virgule.
Les valeurs peuvent tre de n'importe quel type alors que les cls doivent obligatoirement tre de type immuable !
Vous pouvez ainsi utiliser un float ou un tuple comme cl sans problme :
"""
En thorie
d = {
cl: valeur,
cl: valeur,
cl: valeur,
...
cl: valeur
}
"""
# Dictionnaire vide
d = {}
print(d)
# Dictionnaire dont les cls ne sont que des chanes de caractres
d = {
'spam': 'eggs',
'knights': 'lumberjack',
'bacon': 'sausage'
}
print(d)
# Dictionnaire dont les cls sont des objets de diffrents types
d = {
1: 'one',
'deux': 2,
(3, 4, 5): 'pas_de_soucis',
9.9: 'nine_point_nine'
}
print(d)
"""Les dictionnaires que je viens de crer n'ont aucun sens, je voulais juste te montrer ce qu'il tait possible de faire.
Vous pouvez aussi crer un dictionnaire grce la fonction dict:"""
d = dict() # {}
d = dict({
'spam': 'eggs',
'knights': 'lumberjack',
'bacon': 'sausage'
})
print(d)
"""Une cl doit tre unique, les doublons ne sont pas autoriss.
Si cela arrive, cela ne va pas crer d'erreur mais votre seconde cl crasera la premire."""
d = {
'spam': 'eggs',
'knights': 'lumberjack', # 1re cl 'knights'
'bacon': 'sausage',
'knights': 'ham' # 2me cl 'knights' qui va craser la premire
}
print(d)
# Une cl ne peut pas tre un objet muable :
d = {
['spam']: 'eggs' # TypeError: unhashable type: 'list'
}
Alors qu'on accde aux lments contenus dans une liste ou un tuple grce leurs indices (car ce sont des structures ordonns), pour les dictionnaires, on utilise une cl.
On peut utiliser cette cl l'intrieur de crochets [] ou via la mthode get.
La diffrence entre les deux ? Avec les crochets, une erreur de type KeyError est leve si vous tentez d'utiliser une cl inexistante. Alors que la mthode get vous retournera simplement None ou un objet de votre choix.
d = {
'spam': 'eggs',
'knights': 'lumberjack',
'bacon': 'sausage'
}
d['spam'] # 'eggs'
# Si on essaie d'accder une cl inexistante avec les crochets, on a une erreur (KeyError)
# print(d['ham'])
d.get('spam') # 'eggs'
# Avec get, si la cl n'existe pas, on rcupre None
d.get('ham') # None
# Ou la valeur par dfaut que l'on passe en deuxime argument
d.get('ham', "Cette cl n'existe pas...") # "Cette cl n'existe pas..."Les dictionnaires tant des objets muables, ils sont faciles modifier :
d = {
'spam': 'eggs',
'knights': 'lumberjack',
}
d['spam'] = 'ham' # Cl existe dj, remplace la valeur
d['bacon'] = 'sausage' # Nouvelle cl, on crer la paire cl/valeur dans le dicoCela signifie que vous pouvez aussi crer des dictionnaires la vole et y ajouter/supprimer des lments en fonction de ce qu'il se passe dans votre code
Pour les suppressions, plusieurs possibilits en fonction de votre besoin :
Utiliser la mthode pop pour supprimer un item et rcuprer sa valeur dans une variable :
d = {
'spam': 'ham',
'knights': 'lumberjack',
'bacon': 'sausage'
}
item = d.pop('knights') # 'lumberjack' Utiliser la mthode popitem pour supprimer un item alatoirement et rcuprer un tuple contenant une cl et sa valeur :
d = {
'spam': 'ham',
'knights': 'lumberjack',
'bacon': 'sausage'
}
item = d.popitem() # ('bacon', 'sausage') OU ('spam', 'ham') OU ('knights': 'lumberjack') Utiliser clear pour vider le dictionnaire :
d = {
'spam': 'ham',
'knights': 'lumberjack',
'bacon': 'sausage'
}
d.clear() # {} Supprimer entirement le dictionnaire grce l'instruction del :
d = {
'spam': 'ham',
'knights': 'lumberjack',
'bacon': 'sausage'
}
del d
print(d) # NameError: name 'd' is not definedParfois, vous aurez besoin qu'un dictionnaire soit initialis avec des valeurs par dfaut.
Pour faire a, vous pouvez utiliser les defaultdict.
Cela fonctionne exactement comme un dictionnaire la diffrence qu'on doit lui passer une fonction en paramtre. Le rsultat de cette fonction sera la valeur par dfaut de toutes les cls du dictionnaire.
Cela signifie qu'avec un defaultdict, vous n'aurez jamais d'erreur de type KeyError.
from collections import defaultdict programming_languages = defaultdict(lambda: 'Python') programming_languages['.js'] = 'JavaScript' programming_languages['.php'] = 'PHP' print(programming_languages['.js']) # 'Javascript' print(programming_languages['.php']) # 'PHP' print(programming_languages['.py']) # 'Python' => Valeur par dfaut
Comme les dictionnaires sont des collections d'objets, vous pouvez itrer dessus pour rcuprer et modifier des valeurs.
Python nous donne plusieurs outils pour faire a que je vous prsente tout de suite :
Avec une boucle for
La boucle for classique que vous connaissez ! Il faut savoir que sur un dictionnaire, une boucle for va itrer sur les cls uniquement :
d = {
'spam': 'ham',
'knights': 'lumberjack',
'bacon': 'sausage'
}
for key in d:
print(key)On pourrait utiliser la cl pour rcuprer la valeur de cette faon :
d = {
'spam': 'ham',
'knights': 'lumberjack',
'bacon': 'sausage'
}
for key in d:
print(key, d[key]) Avec keys, values et items
Pour itrer sur les cls, vous pouvez aussi utiliser la mthode keys.
Cela revient au mme rsultat que ce qu'on a vu avec la boucle for la diffrence que vous pouvez aussi l'utiliser en dehors d'une boucle :
d = {
'spam': 'ham',
'knights': 'lumberjack',
'bacon': 'sausage'
}
for key in d.keys():
print(key)
keys = d.keys()
print(keys)Pour itrer sur les valeurs, Python met notre disposition la mthode values :
d = {
'spam': 'ham',
'knights': 'lumberjack',
'bacon': 'sausage'
}
for value in d.values():
print(value)Vous pouvez combiner les deux rsultats prcdents grce la mthode items qui permet de rcuprer toutes les paires cls / valeurs :
d = {
'spam': 'ham',
'knights': 'lumberjack',
'bacon': 'sausage'
}
for key, value in d.items():
print(key, value)Vous pouvez vrifier qu'une cl est prsente dans un dictionnaire grce l'oprateur in :
d = {
'spam': 'ham',
'knights': 'lumberjack',
'bacon': 'sausage'
}
print('bacon' in d) # True
print('ham' in d) # False